package com.ec.system.modules.sys.controller;

import com.ec.core.common.core.api.ResponseMsg;
import com.ec.core.common.core.api.Result;
import com.ec.core.common.core.base.BasePageVO;
import com.ec.core.log.annotations.OperLog;
import com.ec.core.mybatis.groups.AddGroup;
import com.ec.core.mybatis.groups.UpdateGroup;
import com.ec.core.secure.annotations.PreAuth;
import com.ec.system.modules.sys.dto.QueryDeptDTO;
import com.ec.system.modules.sys.dto.SysDeptDTO;
import com.ec.system.modules.sys.service.ISysDeptService;
import com.ec.system.modules.sys.vo.DeptTreeVO;
import com.ec.system.modules.sys.vo.SysDeptVO;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.util.List;

/**
 * 部门接口
 *
 * @Author: Eric Lee
 * @date: 2021/9/23 10:47
 */
@RestController
@RequestMapping("/dept")
public class SysDeptController {
    @Resource
    private ISysDeptService sysDeptService;

    /**
     * 部门列表
     *
     * @param listDeptDTO
     * @return
     */
    @GetMapping("/list")
    @PreAuth("sys_dept_view")
    public Result<BasePageVO<SysDeptVO>> listDept(QueryDeptDTO listDeptDTO) {
        return ResponseMsg.success(sysDeptService.listDept(listDeptDTO));
    }

    /**
     * 所有租户部门树形结构
     *
     * @return
     */
    @GetMapping("/allDeptTree")
    public Result<List<DeptTreeVO>> allDeptTree(QueryDeptDTO queryDeptDTO) {
        return ResponseMsg.success(sysDeptService.allDeptTree(queryDeptDTO));
    }

    /**
     * 租户部门树形结构
     *
     * @return
     */
    @GetMapping("/tenantDeptTree")
    public Result<List<DeptTreeVO>> tenantDeptTree() {
        return ResponseMsg.success(sysDeptService.tenantDeptTree());
    }


    /**
     * 添加操作
     *
     * @param deptDTO
     * @return
     */
    @PostMapping
    @PreAuth("sys_dept_add")
    @OperLog(desc = "新增部门")
    public Result<Void> addDept(@Validated(AddGroup.class) @RequestBody SysDeptDTO deptDTO) {
        return ResponseMsg.status(sysDeptService.addDept(deptDTO));
    }

    /**
     * 修改操作
     *
     * @param deptDTO
     * @return
     */
    @PutMapping
    @PreAuth("sys_dept_edit")
    @OperLog(desc = "修改部门")
    public Result<Void> updateDept(@Validated(UpdateGroup.class) @RequestBody SysDeptDTO deptDTO) {
        return ResponseMsg.status(sysDeptService.updateDept(deptDTO));
    }

    /**
     * 删除操作
     *
     * @param deptId
     * @return
     */
    @DeleteMapping("/{deptId}")
    @PreAuth("sys_dept_delete")
    @OperLog(desc = "删除部门")
    public Result<Void> deleteDept(@PathVariable Long deptId) {
        SysDeptDTO deptDTO = new SysDeptDTO();
        deptDTO.setDeptId(deptId);
        return ResponseMsg.status(sysDeptService.deleteDept(deptDTO));
    }
}
